//所有项目的入口文件
import Vue from 'vue'

import VueRouter from 'vue-router'
// 1.2 安装路由
Vue.use(VueRouter)

import VueResource from 'vue-resource'
//安装VueResource   用来获取数据
Vue.use(VueResource)

//设置全局根路径
Vue.http.options.root = 'http://www.liulongbin.top:3005'

//设置全局post提交表格以普通表格形式提交
Vue.http.options.emulateJSON = true

Vue.http.options.emulateHTTP = true

//全局方法 Vue.filter() 注册一个自定义时间格式过滤器,必须放在Vue实例化前面
import Moment from 'moment'

Vue.filter('DateFormat', function( dataStr, pattern = "YYYY-MM-DD HH:mm:ss" ) {   
    return Moment(dataStr).format(pattern);
});

//导入mui组件样式
import './lib/mui/css/mui.min.css'
// 导入扩展图标样式
import './lib/mui/css/icons-extra.css'

//导入mint-ui组件
import MintUi from 'mint-ui'
Vue.use(MintUi)

import 'mint-ui/lib/style.css'

//导入图片预览组件
import VuePreview from 'vue-preview'
Vue.use(VuePreview);

//导入router.js模块
import router from './router.js'

//导入App根组件
import app from './App.vue'

//导入vuex组件用于缓存公共数据

import Vuex from 'vuex'
Vue.use(Vuex);

var car =  JSON.parse(localStorage.getItem('car') || '[]');

const store = new Vuex.Store({
    state: {
        car: car, //用于组件保存传过来的数据
    },
    mutations: { //专门处理state状态的值
        //把公共点数据保存到Vuex上
        //分析 1.判断car中是否有当前商品，如果有直接改变数量。如果没有，就push到car中
        addGoodsCar:function(state, shopPublic){
            //定义一个开关，就是说默认没找到对应的商品，就可以直接push
            var flag = false;
            var newItem = 0;
            state.car.some(item =>{
                if( item.id == shopPublic.id){
                    newItem = parseInt(item.count);
                    item.count = newItem;
                    item.count += parseInt(shopPublic.count);
                    
                    flag = true;
                    return true;
                }
            });

            if(!flag){
                state.car.push(shopPublic);
            }

            localStorage.setItem("car", JSON.stringify(state.car));
        },
        //商品结算页面更新商品数量
        updateCount:function(state,shopPublic){
            state.car.some(item =>{
                if(item.id == shopPublic.id){   
                    item.count = parseInt(shopPublic.count);
                    return true;
                }
            });
            localStorage.setItem("car", JSON.stringify(state.car));
        },

        //删除
        removeGoodsList:function(state,id){
            state.car.forEach((item,i) =>{
                if(item.id == id){
                    state.car.splice(i,1);
                    return;
                }
            })
            //把最新数据同步到localStorage中
            localStorage.setItem("car", JSON.stringify(state.car));
        },
        //选中状态
        switchGoodsList:function(state,shopPublic){
            state.car.some(item =>{
                if(item.id == shopPublic.id){   
                    item.selected = shopPublic.val;

                    console.log(item.id+":"+item.selected);
                    return true;
                }
            });
            localStorage.setItem("car", JSON.stringify(state.car));
        }
          
    },
    getters:{
        //获取选中的商品的总数量
        getShopAll:function(state){
            var shop_num = 0;
            state.car.forEach(item =>{
                shop_num += parseInt(item.count);
            })
            return shop_num;
        },
        getSetGoodsCount:function(state){
            var idCount = {};
            state.car.forEach(item =>{
                idCount[item.id] = item.count;
            })
            return idCount;
        },

        //选中状态  手动创建一个键值对用于存放某id对应的选中状态
        selectedGoodList:function(state){
            var selectedObj = {};
            state.car.forEach(item =>{
                selectedObj[item.id] = item.selected;
            });
            return selectedObj;
        },

        //计算商品总价格
        allPrice:function(state){
            var ap = {
                selNum: 0,
                amount: 0,
                all_amount: 0,

            }
            state.car.forEach(item =>{
                if(item.selected){
                    ap.selNum += parseInt(item.count);
                    ap.amount += item.count*item.sellPrice;
                }
                ap.all_amount += item.count*item.sellPrice;
            });
            return ap;
        }
    }
});

var vm = new Vue({
    el: '#app',
    render: c => c(app), // render 会把 el 指定的容器中，所有的内容都清空覆盖
    router,  //路由器组件绑定在vue上 
    store, //挂载到vm实例上的组件，所有组件都可以访问 
})